第一掌:编译KO文件,生成rt3070sta.ko
编译时提示如下错误:
错误:
./include/generated/autoconf.h:708: fatal error: /home/lqm/share/V210/samsung/kernel/include/config/modversions.h: No such file or directory
这是因为内核中没有开启模块版本管理选项,在内核的menuconfig中做如下配置:
make menuconfig
[*] Enable loadable module support --->
[*] Module versioning support
重新编译内核后,再编译RT3070源码,该问题解决。
另外提示找不到private等变量的问题,是因为内核中CONFIG_EXT_PRIV没有置高造成的,三星默认BSP包并没有置高该变量,这个配置很繁琐,配了
整整一个下午也没有配出来,换用自己的BSP包,问题解决。
为支持android系统,需修改源码:
由于在linux的根文件系统下存在/etc目录,而android的根目录下,/etc是从/system/etc下链接过来的,因此
需要修改wifi源码,让驱动从/system/etc下寻找配置文件。
寻找/etc/Wireless文件,找到如下文件存在,全修改为/system/etc/Wireless:
root@lqm:/opt/program/tools/RT3070_Linux_STA# grep -r '/etc/Wireless' ./
./include/os/rt_drv.h:#define STA_PROFILE_PATH "/etc/Wireless/RT2870STA/RT2870STA.dat"
./include/os/rt_drv.h:#define CARD_INFO_PATH "/etc/Wireless/RT2870STA/RT2870STACard.dat"
./include/os/rt_drv.h:#define EEPROM_BIN_FILE_NAME "/etc/Wireless/RT2870STA/e2p.bin"
./include/os/rt_linux.h:#define STA_PROFILE_PATH "/etc/Wireless/RT2870STA/RT2870STA.dat"
./include/os/rt_linux.h:#define CARD_INFO_PATH "/etc/Wireless/RT2870STA/RT2870STACard.dat"
./include/os/rt_linux.h:#define EEPROM_BIN_FILE_NAME "/etc/Wireless/RT2870STA/e2p.bin"
./os/linux/Makefile.6:DAT_PATH = /etc/Wireless/RT$(CHIPSET_DAT)STA
./os/linux/Makefile.6: $(shell [ ! -f /etc/Wireless ] && mkdir /etc/Wireless)
二进制文件 ./os/linux/rt_profile.o 匹配
./os/linux/Makefile:DAT_PATH = /mnt/etc/Wireless/RT$(CHIPSET_DAT)STA
./os/linux/Makefile: $(shell [ ! -f /etc/Wireless ] && mkdir /etc/Wireless)
二进制文件 ./os/linux/rt3070sta.o 匹配
二进制文件 ./os/linux/rt3070sta.ko 匹配
./os/linux/Makefile.4:DAT_PATH = /etc/Wireless/RT$(CHIPSET_DAT)STA
./os/linux/Makefile.4: $(shell [ ! -f /etc/Wireless ] && mkdir /etc/Wireless)
二进制文件 ./common/rtmp_init_inf.o 匹配
./RT2870STACard.dat:00CARDID=/etc/Wireless/RT2870STA/RT2870STA1.dat
./RT2870STACard.dat:01CARDID=/etc/Wireless/RT2870STA/RT2870STA2.dat
./RT2870STACard.dat:02CARDID=/etc/Wireless/RT2870STA/RT2870STA3.dat
./RT2870STACard.dat:00MAC00:0E:2E:C3:D0:48=/etc/Wireless/RT2870STA/RT2870STA1.dat
./RT2870STACard.dat:01MAC00:40:F4:FF:AA:40=/etc/Wireless/RT2870STA/RT2870STA2.dat
./RT2870STACard.dat:02MAC00:0C:43:10:11:5C=/etc/Wireless/RT2870STA/RT2870STA3.dat
./RT2870STACard.dat:00CARDTYPEbgn=/etc/Wireless/RT2870STA/RT2870STA1.dat
./RT2870STACard.dat:01CARDTYPEbgn=/etc/Wireless/RT2870STA/RT2870STA2.dat
./RT2870STACard.dat:02CARDTYPEabgn=/etc/Wireless/RT2870STA/RT2870STA3.dat
root@lqm:/opt/program/tools/RT3070_Linux_STA#
再次编译,最终得到我们需要的ko文件。
第二掌:修改init.rc文件
on init
# give system access to wpa_supplicant.conf for backup and restore
mkdir /data/misc/wifi 0777 wifi system
chmod 0771 /data/misc/wifi
chmod 0660 /data/misc/wifi/wpa_supplicant.conf
mkdir /system/etc/wifi 0771 wifi wifi
chmod 0771 /system/etc/wifi
chmod 0660 /system/etc/wifi/wpa_supplicant.conf
chown wifi wifi /system/etc/wifi/wpa_supplicant.conf
mkdir /data/misc/dhcp 0777 wifi system
mkdir /data/misc/wifi/sockets 0777 wifi wifi
mkdir /data/misc/wifi/wpa_supplicant 0777 wifi system
mkdir /data/misc/wifi/hostapd 0777 wifi system
mkdir /system/etc/Wireless 0777 wifi wifi
mkdir /system/etc/Wireless/RT2870STA 0777 wifi wifi
on boot
# basic network init
ifup lo
hostname localhost
domainname localdomain
mkdir /data/system 0775 system system
mkdir /data/system/wpa_supplicant 0771 wifi wifi # lqm added.
# Set DNS. lqm added.
setprop net.dns1 192.168.1.1
# Prepare for wifi. lqm added.
setprop wifi.interface ra0
mkdir /data/misc/wifi/sockets 0777 wifi wifi #lqm changed property
mkdir /data/misc/dhcp 0771 system system #lqm changed.
service wpa_supplicant /system/bin/wpa_supplicant -Dwext -ira0 -c /system/etc/wifi/wpa_supplicant.conf
group system wifi inet
disabled
oneshot
service dhcpcd /system/bin/dhcpcd ra0
group system dhcp wifi
disabled
oneshot
默认init.rc中全使用的wlan0,而rt2860的网络名称为ra0,因此需全替换为ra0。
编译时提示如下错误:
错误:
./include/generated/autoconf.h:708: fatal error: /home/lqm/share/V210/samsung/kernel/include/config/modversions.h: No such file or directory
这是因为内核中没有开启模块版本管理选项,在内核的menuconfig中做如下配置:
make menuconfig
[*] Enable loadable module support --->
[*] Module versioning support
重新编译内核后,再编译RT3070源码,该问题解决。
另外提示找不到private等变量的问题,是因为内核中CONFIG_EXT_PRIV没有置高造成的,三星默认BSP包并没有置高该变量,这个配置很繁琐,配了
整整一个下午也没有配出来,换用自己的BSP包,问题解决。
为支持android系统,需修改源码:
由于在linux的根文件系统下存在/etc目录,而android的根目录下,/etc是从/system/etc下链接过来的,因此
需要修改wifi源码,让驱动从/system/etc下寻找配置文件。
寻找/etc/Wireless文件,找到如下文件存在,全修改为/system/etc/Wireless:
root@lqm:/opt/program/tools/RT3070_Linux_STA# grep -r '/etc/Wireless' ./
./include/os/rt_drv.h:#define STA_PROFILE_PATH "/etc/Wireless/RT2870STA/RT2870STA.dat"
./include/os/rt_drv.h:#define CARD_INFO_PATH "/etc/Wireless/RT2870STA/RT2870STACard.dat"
./include/os/rt_drv.h:#define EEPROM_BIN_FILE_NAME "/etc/Wireless/RT2870STA/e2p.bin"
./include/os/rt_linux.h:#define STA_PROFILE_PATH "/etc/Wireless/RT2870STA/RT2870STA.dat"
./include/os/rt_linux.h:#define CARD_INFO_PATH "/etc/Wireless/RT2870STA/RT2870STACard.dat"
./include/os/rt_linux.h:#define EEPROM_BIN_FILE_NAME "/etc/Wireless/RT2870STA/e2p.bin"
./os/linux/Makefile.6:DAT_PATH = /etc/Wireless/RT$(CHIPSET_DAT)STA
./os/linux/Makefile.6: $(shell [ ! -f /etc/Wireless ] && mkdir /etc/Wireless)
二进制文件 ./os/linux/rt_profile.o 匹配
./os/linux/Makefile:DAT_PATH = /mnt/etc/Wireless/RT$(CHIPSET_DAT)STA
./os/linux/Makefile: $(shell [ ! -f /etc/Wireless ] && mkdir /etc/Wireless)
二进制文件 ./os/linux/rt3070sta.o 匹配
二进制文件 ./os/linux/rt3070sta.ko 匹配
./os/linux/Makefile.4:DAT_PATH = /etc/Wireless/RT$(CHIPSET_DAT)STA
./os/linux/Makefile.4: $(shell [ ! -f /etc/Wireless ] && mkdir /etc/Wireless)
二进制文件 ./common/rtmp_init_inf.o 匹配
./RT2870STACard.dat:00CARDID=/etc/Wireless/RT2870STA/RT2870STA1.dat
./RT2870STACard.dat:01CARDID=/etc/Wireless/RT2870STA/RT2870STA2.dat
./RT2870STACard.dat:02CARDID=/etc/Wireless/RT2870STA/RT2870STA3.dat
./RT2870STACard.dat:00MAC00:0E:2E:C3:D0:48=/etc/Wireless/RT2870STA/RT2870STA1.dat
./RT2870STACard.dat:01MAC00:40:F4:FF:AA:40=/etc/Wireless/RT2870STA/RT2870STA2.dat
./RT2870STACard.dat:02MAC00:0C:43:10:11:5C=/etc/Wireless/RT2870STA/RT2870STA3.dat
./RT2870STACard.dat:00CARDTYPEbgn=/etc/Wireless/RT2870STA/RT2870STA1.dat
./RT2870STACard.dat:01CARDTYPEbgn=/etc/Wireless/RT2870STA/RT2870STA2.dat
./RT2870STACard.dat:02CARDTYPEabgn=/etc/Wireless/RT2870STA/RT2870STA3.dat
root@lqm:/opt/program/tools/RT3070_Linux_STA#
再次编译,最终得到我们需要的ko文件。
第二掌:修改init.rc文件
on init
# give system access to wpa_supplicant.conf for backup and restore
mkdir /data/misc/wifi 0777 wifi system
chmod 0771 /data/misc/wifi
chmod 0660 /data/misc/wifi/wpa_supplicant.conf
mkdir /system/etc/wifi 0771 wifi wifi
chmod 0771 /system/etc/wifi
chmod 0660 /system/etc/wifi/wpa_supplicant.conf
chown wifi wifi /system/etc/wifi/wpa_supplicant.conf
mkdir /data/misc/dhcp 0777 wifi system
mkdir /data/misc/wifi/sockets 0777 wifi wifi
mkdir /data/misc/wifi/wpa_supplicant 0777 wifi system
mkdir /data/misc/wifi/hostapd 0777 wifi system
mkdir /system/etc/Wireless 0777 wifi wifi
mkdir /system/etc/Wireless/RT2870STA 0777 wifi wifi
on boot
# basic network init
ifup lo
hostname localhost
domainname localdomain
mkdir /data/system 0775 system system
mkdir /data/system/wpa_supplicant 0771 wifi wifi # lqm added.
# Set DNS. lqm added.
setprop net.dns1 192.168.1.1
# Prepare for wifi. lqm added.
setprop wifi.interface ra0
mkdir /data/misc/wifi/sockets 0777 wifi wifi #lqm changed property
mkdir /data/misc/dhcp 0771 system system #lqm changed.
service wpa_supplicant /system/bin/wpa_supplicant -Dwext -ira0 -c /system/etc/wifi/wpa_supplicant.conf
group system wifi inet
disabled
oneshot
service dhcpcd /system/bin/dhcpcd ra0
group system dhcp wifi
disabled
oneshot
默认init.rc中全使用的wlan0,而rt2860的网络名称为ra0,因此需全替换为ra0。